﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SimpleData.Infrastructure.Plugins;

namespace SimpleData.Infrastructure.Provider
{
	/**
	 * Padrão de desenvolvimento para cada provider
	 * 
	 *	Provider[IDataObjectName, Plugin]	-->	Factory	-->	Componente (lógica personalizada)
	 */


	/// <summary>
	/// Representa uma factory de objetos utilizados internamentes no sistema
	/// </summary>
	/// <typeparam name="TData"></typeparam>
	/// <typeparam name="TData"></typeparam>
	public interface IProvider<in TData, out TPlugin> : IPluggable
	{
		/// <summary>
		/// Realiza a criação de um novo objeto
		/// </summary>
		/// <param name="settings"></param>
		/// <returns></returns>
		TPlugin Create( TData settings );
	}

}
